package br.ucb.managedBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import br.ucb.JPA.LigaDAO;
import br.ucb.negocio.Jogo;
import br.ucb.negocio.Liga;
import br.ucb.util.Valida;

@ManagedBean(name="ligaMB")
@SessionScoped
public class LigaManagedBean implements Serializable{
	private static final long serialVersionUID = 1L;
	
	private LigaDAO dao = new  LigaDAO();
	
	private Liga liga;
	List<Liga> ligas;
	
	//	Valores selecionados
	List<String> jogosMarcado  = new ArrayList<String>();
	
	public HashMap<String, Object> jogosMarcadoValor;
	
	public List<Liga> getListarLigas() {
        ligas  = dao.listar();
        return ligas;
    }

    public Liga getLiga() {
        return liga;
    }

    public void setLiga(Liga liga) {
        this.liga = liga;
    }

    public void prepararAdicionarLiga(ActionEvent actionEvent) {
        liga = new Liga();
    }

    public void adicionarLiga(ActionEvent actionEvent) {
    	FacesContext context = FacesContext.getCurrentInstance();
    	if(Valida.isLiga(liga)){
    		dao.incluir(liga);
            liga = new Liga();
    	} else {
    		context.addMessage(null, new FacesMessage("Erro", "Liga já existente"));
    	} 
        
    }

    public void alterarLiga(ActionEvent actionEvent){
        dao.alterar(liga);
    }

    public void excluirLiga() {
        dao.excluir(liga);
        liga = new Liga();
    }
    
    // Jogos
	public HashMap<String,Object> getGeraJogosMarcadoValor() {
		JogoManagedBean jogoMB = new JogoManagedBean();
		jogosMarcadoValor = new LinkedHashMap<String, Object>();
		
		if (liga != null) {
			List<Jogo> jogos = jogoMB.getListarJogos();
			
			for(Jogo j: jogos) {
				jogosMarcadoValor.put(j.getNome(), Long.toString(j.getId()));
			}
		}
		
		return jogosMarcadoValor;
	}
	
    public void adicionarJogos(ActionEvent actionEvent) {
		JogoManagedBean jogoMB = new JogoManagedBean();
		Jogo jogo;
		
		liga.getJogos().clear();
		
		for (int i = 0; i < jogosMarcado.size(); i++) {
			jogo = jogoMB.consultar(Long.valueOf(jogosMarcado.get(i)));
			liga.getJogos().add(jogo);
		}
    	
        dao.alterar(liga);
		dao.atualizaLiga(liga);
        liga = new Liga();
    }
    
	public List<String> getJogosMarcado() {
		if (liga != null && liga.getId() != null) {
			jogosMarcado.clear();
			dao.atualizaLiga(liga);
			List<Jogo> listaJogoLiga = (List<Jogo>) liga.getJogos();
			
			for (int x = 0; x < listaJogoLiga.size(); x++) {
				jogosMarcado.add(Long.toString(listaJogoLiga.get(x).getId()));
			}
		}
		
		return jogosMarcado;
	}

	public void setJogosMarcado(List<String> jogosMarcado) {
		this.jogosMarcado = jogosMarcado;
	}
}
